<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // const a = '213';
        /**
        * @obj 需要转换的对象
        * @type 期望的结果类型
        */
        // ToPrimitive(obj, type)
        // 如果为原始值则返回不是则进行下一步
        // 1、当type为number时 先调用valueOf() 后调用 toStringOf() 之后报错TypeError
        // 2、当type为string时 先调用toString() 后调用 valueOf() 之后报错TypeError
        // 3、Date对象默认type为string 其余为number


        // 一、+操作符
        // 当两边有一个字符串时 会都转换为字符串 其余情况为转换为数字
        console.log(1 + '1', '1' + false)
        console.log(true + false)
        // 当加号仅有右值 且为字符串数据时转换为数字 否则为NaN
        console.log(typeof +'1')
        // 二、-、*、\操作符
        // 会将两侧转换为数字
        console.log('23' - 1, '24' * true, '1' / 'aa');

        // 三、== 操作符 会将两侧都尽量转换为number
        // 四、> < 两侧都是字符串时比较字母表 其他情况会先变成数字再比较
        console.log('a' > 'b')
        console.log(1 > false)

        // 对象会被转换为基本类型后进行比较
        console.log({} > 0) // false NaN > 0


        // 例子
        const str = { a: 2 }, str2 = { b: 2 }
        console.log(str + str2)
    </script>
</body>

</html>